/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package rs_GUI;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import pojos.Album;
import pojos.Artist;
import pojos.Musicgenre;
import pojos.Musicgroup;

/**
 *
 * @author Mastroperrou
 */

public class Artist_MainPanel extends javax.swing.JPanel {
    //Ο γονέας
    private RadioStationParentFrame frame;
    //Ο EntityManager
    private EntityManager em;
    private int row;
    
    //Λοιπά Πεδία
    private List<Artist> ar = new ArrayList<>();
    private Artist artist = new Artist();
    private String neosKallitexnis = "";
    private String neosKallitexnisS = "???";
    private Date neosKallitexnisBday = new Date();
    private String neosKallitexnisBplace = "";
    private Artist artist2;
    private boolean cancelSave = false;
    private List<Musicgenre> gnr = new ArrayList<>();
    private int exit;
    
    JMenuBar menu;
    JMenu  jMenu1;    
    
    public Artist_MainPanel(RadioStationParentFrame frame, EntityManager em) {
        this.frame = frame;
        this.em = em;
        initComponents();
        
        //Ταξινόμηση της artistList
        sortArtistList();
        
        //Απενεργοποίηση των πεδίων εισαγωγής στοιχείων και των labels τους
        artisticNameTextField.setEnabled(false);
        genreComboBox.setEnabled(false);
        nameTextField.setEnabled(false);
        lastnameTextField.setEnabled(false);
        birthdayDateChooser.setEnabled(false);
        birthdayDateChooser.setVisible(false);
        birthPlaceTextField.setEnabled(false);
        cancelButton.setEnabled(false);
        saveButton.setEnabled(false);
        artisticNameLabel.setEnabled(false);
        genreLabel.setEnabled(false);
        nameLabel.setEnabled(false);
        lastnameLabel.setEnabled(false);
        sexLabel.setEnabled(false);
        birthdayLabel.setEnabled(false);
        birthPlaceLabel.setEnabled(false);
        genreComboBox.setSelectedItem(null);
        femaleRadioButton.setEnabled(false);
        femaleRadioButton.setSelected(false);
        maleRadioButton.setEnabled(false);
        maleRadioButton.setSelected(false);
        setMainMenu();
    }
    
    //Ταξινόμηση της artistList
    private void sortArtistList(){
        Collections.sort(artistList, new Comparator<Artist>() {
            @Override 
            public int compare(Artist ar1, Artist ar2) {
                return ar1.getArtisticname().compareTo(ar2.getArtisticname());
            }
        });
    }
    
    private void setMainMenu(){
        JMenuBar menu = new JMenuBar();
        JMenu  jMenu1 = new JMenu("Μενού");  
        
        JMenuItem newArtistItem = new JMenuItem("Εισαγωγή Νέου");
        newArtistItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                newArtistItemActionPerformed(evt);
            }
        });
        jMenu1.add(newArtistItem);
              
        JMenuItem exitItem = new JMenuItem("Έξοδος");
        exitItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exitItemActionPerformed(evt);
            }
        });
        jMenu1.add(exitItem);
               
        menu.add(jMenu1);
        frame.setJMenuBar(menu);
    }
    
    private void setSaveMenu(){
        jMenu1 = new JMenu("Μενού");
        menu = new JMenuBar();
        
        JMenuItem saveGroupItem = new JMenuItem("Αποθήκευση");
        saveGroupItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveButtonActionPerformed(evt);
            }
        });
        jMenu1.add(saveGroupItem);
              
        JMenuItem cancelItem = new JMenuItem("Ακύρωση");
        cancelItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelButtonActionPerformed(evt);
            }
        });
        jMenu1.add(cancelItem);
               
        menu.add(jMenu1);
        frame.setJMenuBar(menu);        
    }
    
    private void newArtistItemActionPerformed(java.awt.event.ActionEvent evt) {                                           
        this.newButtonActionPerformed(evt);
    }      
     
    private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {                                           
        this.exitButtonActionPerformed(evt);
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        artistQuery = java.beans.Beans.isDesignTime() ? null : em.createQuery("SELECT a FROM Artist a");
        artistList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(artistQuery.getResultList());
        artist1 = new pojos.Artist();
        musicgenreQuery = java.beans.Beans.isDesignTime() ? null : em.createQuery("SELECT m FROM Musicgenre m");
        musicgenreList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : musicgenreQuery.getResultList();
        mainLabel = new javax.swing.JLabel();
        artistListPanel = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        artistsTable = new javax.swing.JTable();
        newButton = new javax.swing.JButton();
        changeButton = new javax.swing.JButton();
        deleteButton = new javax.swing.JButton();
        exitButton = new javax.swing.JButton();
        artistManagementPanel = new javax.swing.JPanel();
        artisticNameLabel = new javax.swing.JLabel();
        cancelButton = new javax.swing.JButton();
        nameLabel = new javax.swing.JLabel();
        lastnameLabel = new javax.swing.JLabel();
        birthdayLabel = new javax.swing.JLabel();
        birthPlaceTextField = new javax.swing.JTextField();
        nameTextField = new javax.swing.JTextField();
        artisticNameTextField = new javax.swing.JTextField();
        birthPlaceLabel = new javax.swing.JLabel();
        saveButton = new javax.swing.JButton();
        lastnameTextField = new javax.swing.JTextField();
        genreLabel = new javax.swing.JLabel();
        birthdayDateChooser = new com.toedter.calendar.JDateChooser();
        genreComboBox = new javax.swing.JComboBox();
        femaleRadioButton = new javax.swing.JRadioButton();
        maleRadioButton = new javax.swing.JRadioButton();
        sexLabel = new javax.swing.JLabel();

        setMaximumSize(new java.awt.Dimension(610, 445));
        setMinimumSize(new java.awt.Dimension(610, 445));
        setPreferredSize(new java.awt.Dimension(610, 445));

        mainLabel.setText("ΑΡΧΕΙΟ ΚΑΛΛΙΤΕΧΝΩΝ");

        artistListPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Λίστα καλλιτεχνών"));
        artistListPanel.setMinimumSize(new java.awt.Dimension(100, 100));
        artistListPanel.setPreferredSize(new java.awt.Dimension(100, 100));

        artistsTable.setFont(new java.awt.Font("Comic Sans MS", 1, 13)); // NOI18N
        artistsTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistList, artistsTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${artisticname}"));
        columnBinding.setColumnName("Καλλιτέχνης");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${musicgenreid}"));
        columnBinding.setColumnName("Είδος");
        columnBinding.setColumnClass(pojos.Musicgenre.class);
        columnBinding.setEditable(false);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        artistsTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                artistsTableMouseClicked(evt);
            }
        });
        artistsTable.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                artistsTablePropertyChange(evt);
            }
        });
        jScrollPane1.setViewportView(artistsTable);
        if (artistsTable.getColumnModel().getColumnCount() > 0) {
            artistsTable.getColumnModel().getColumn(1).setPreferredWidth(1);
        }

        newButton.setText("ΕΙΣΑΓΩΓΗ ΝΕΟΥ");
        newButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                newButtonActionPerformed(evt);
            }
        });

        changeButton.setText("ΜΕΤΑΒΟΛΗ");
        changeButton.setMaximumSize(new java.awt.Dimension(113, 23));
        changeButton.setMinimumSize(new java.awt.Dimension(113, 23));
        changeButton.setPreferredSize(new java.awt.Dimension(113, 23));
        changeButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                changeButtonActionPerformed(evt);
            }
        });

        deleteButton.setText("ΔΙΑΓΡΑΦΗ");
        deleteButton.setMaximumSize(new java.awt.Dimension(113, 23));
        deleteButton.setMinimumSize(new java.awt.Dimension(113, 23));
        deleteButton.setPreferredSize(new java.awt.Dimension(113, 23));
        deleteButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout artistListPanelLayout = new javax.swing.GroupLayout(artistListPanel);
        artistListPanel.setLayout(artistListPanelLayout);
        artistListPanelLayout.setHorizontalGroup(
            artistListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(artistListPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(artistListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addGroup(artistListPanelLayout.createSequentialGroup()
                        .addGroup(artistListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(newButton, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE)
                            .addComponent(changeButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(deleteButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap())))
        );
        artistListPanelLayout.setVerticalGroup(
            artistListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(artistListPanelLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(newButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(changeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        artistListPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {changeButton, deleteButton, newButton});

        exitButton.setFont(new java.awt.Font("Tahoma", 1, 16)); // NOI18N
        exitButton.setText("ΕΞΟΔΟΣ");
        exitButton.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        exitButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exitButtonActionPerformed(evt);
            }
        });

        artistManagementPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Διαχείριση Καλλιτέχνη"));

        artisticNameLabel.setText("Καλλιτεχνικό Όνομα *");

        cancelButton.setLabel("ΑΚΥΡΩΣΗ");
        cancelButton.setMaximumSize(new java.awt.Dimension(113, 23));
        cancelButton.setMinimumSize(new java.awt.Dimension(113, 23));
        cancelButton.setPreferredSize(new java.awt.Dimension(113, 23));
        cancelButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelButtonActionPerformed(evt);
            }
        });

        nameLabel.setText("Όνομα *");

        lastnameLabel.setText("Επώνυμο *");

        birthdayLabel.setText("Ημ. Γέννησης");

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistsTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.birthplace}"), birthPlaceTextField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        birthPlaceTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                birthPlaceTextFieldActionPerformed(evt);
            }
        });

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistsTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.firstname}"), nameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        nameTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nameTextFieldActionPerformed(evt);
            }
        });

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistsTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.artisticname}"), artisticNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        artisticNameTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                artisticNameTextFieldActionPerformed(evt);
            }
        });

        birthPlaceLabel.setText("Τόπος Γέννησης");

        saveButton.setLabel("ΑΠΟΘΗΚΕΥΣΗ");
        saveButton.setMaximumSize(new java.awt.Dimension(113, 23));
        saveButton.setMinimumSize(new java.awt.Dimension(113, 23));
        saveButton.setPreferredSize(new java.awt.Dimension(113, 23));
        saveButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveButtonActionPerformed(evt);
            }
        });

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistsTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.lastname}"), lastnameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        genreLabel.setText("Είδος Μουσικής *");

        genreComboBox.setEditable(true);

        org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, musicgenreList, genreComboBox);
        bindingGroup.addBinding(jComboBoxBinding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistsTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.musicgenreid}"), genreComboBox, org.jdesktop.beansbinding.BeanProperty.create("selectedItem"));
        bindingGroup.addBinding(binding);

        genreComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                genreComboBoxActionPerformed(evt);
            }
        });

        femaleRadioButton.setLabel("ΓΥΝΑΙΚΑ:");
        femaleRadioButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                femaleRadioButtonActionPerformed(evt);
            }
        });

        maleRadioButton.setLabel("ΑΝΔΡΑΣ:");
        maleRadioButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                maleRadioButtonActionPerformed(evt);
            }
        });

        sexLabel.setText("Φύλο");

        javax.swing.GroupLayout artistManagementPanelLayout = new javax.swing.GroupLayout(artistManagementPanel);
        artistManagementPanel.setLayout(artistManagementPanelLayout);
        artistManagementPanelLayout.setHorizontalGroup(
            artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(artistManagementPanelLayout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(artistManagementPanelLayout.createSequentialGroup()
                        .addGap(53, 53, 53)
                        .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(saveButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 66, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, artistManagementPanelLayout.createSequentialGroup()
                        .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(nameLabel)
                            .addComponent(birthdayLabel)
                            .addComponent(sexLabel)
                            .addComponent(artisticNameLabel)
                            .addComponent(lastnameLabel)
                            .addComponent(genreLabel)
                            .addComponent(birthPlaceLabel))
                        .addGap(6, 6, 6)
                        .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(artisticNameTextField)
                            .addComponent(genreComboBox, 0, 166, Short.MAX_VALUE)
                            .addComponent(lastnameTextField)
                            .addComponent(nameTextField)
                            .addGroup(artistManagementPanelLayout.createSequentialGroup()
                                .addComponent(maleRadioButton)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(femaleRadioButton))
                            .addComponent(birthPlaceTextField)
                            .addComponent(birthdayDateChooser, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap())
        );

        artistManagementPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, saveButton});

        artistManagementPanelLayout.setVerticalGroup(
            artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(artistManagementPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nameLabel)
                    .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lastnameLabel)
                    .addComponent(lastnameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(artisticNameLabel)
                    .addComponent(artisticNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(sexLabel)
                    .addComponent(maleRadioButton)
                    .addComponent(femaleRadioButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(birthdayLabel)
                    .addComponent(birthdayDateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(genreLabel)
                    .addComponent(genreComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(artistManagementPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(birthPlaceLabel)
                    .addComponent(birthPlaceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(34, 34, 34)
                .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        artistManagementPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {cancelButton, saveButton});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(artistListPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(artistManagementPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(22, 22, 22)
                        .addComponent(mainLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(mainLabel)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(artistManagementPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(artistListPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        bindingGroup.bind();
    }// </editor-fold>//GEN-END:initComponents

    private void nameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nameTextFieldActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_nameTextFieldActionPerformed

    private void maleRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maleRadioButtonActionPerformed
        if (this.maleRadioButton.isSelected()) {
            this.femaleRadioButton.setSelected(false);
            this.femaleRadioButton.repaint();
        } 
    }//GEN-LAST:event_maleRadioButtonActionPerformed

    private void femaleRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_femaleRadioButtonActionPerformed
        if (this.femaleRadioButton.isSelected()) {
            this.maleRadioButton.setSelected(false);
            this.maleRadioButton.repaint();
        }    
    }//GEN-LAST:event_femaleRadioButtonActionPerformed

    private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed
        // Βάζουμε στη μεταβλητή row τη γραμμή που επιλέξαμε
        row = artistsTable.getSelectedRow();
        
        // Αν δεν έχουμε επιλλέξει κάτι τότε βγάλε μήνυμα λάθους
        if (artistsTable.getSelectedRow() == -1) {
            JOptionPane.showMessageDialog(this, "Επιλέξτε έναν καλλιτέχνη", 
                                           "ERROR",
                                           JOptionPane.WARNING_MESSAGE);
        }
        
        else {
            // Μήνυμα επιβεβαίωσης της διαγραφής
            Object[] options = {"Ναι","Όχι"};
            Integer choice = JOptionPane.showOptionDialog(this,
            "Διαγραφή επιλεγμένου καλλιτέχνη;",
            "Επιβεβαίωση διαγραφής",
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null,
            options,
            options[0]);
            
            if (choice == JOptionPane.YES_OPTION){
                deleteButton.setEnabled(false);
                //Βάλε στο Artist1 τον καλλιτέχνη
                artist1 = artistList.get(row);
                
                // Ελέγχουμε αν ο συγκεκριμένος καλλιτέχνης είναι μέλος κάποιου 
                //συγκροτήματος το oποίο να αποτελείται από μόνο δύο μέλη
                for (Musicgroup mg : artist1.getMusicgroupList()) {
                    //Αν ανήκει σε συγκρότημα με δύο μόνο μέλη
                    if (mg.getArtistList().size() == 2) { 
                        JOptionPane.showMessageDialog(this, 
                            "Ο καλλιτέχνης συμμετέχει σε συγκρότημα/τα με μόνο δύο μέλη\n" 
                            + "και δεν μπορεί να διαγραφεί", 
                            "Σφάλμα",
                            JOptionPane.WARNING_MESSAGE);
                        deleteButton.setEnabled(true);
                        return;   
                    }   
                }
                
                // Ελέγχουμε αν ο συγκεκριμένος καλλιτέχνης είναι 
                //ο μόναδικός ερμηνευτής σε κάποιο Album 
                for (Album alb : artist1.getAlbumList()) {
                    if (alb.getMusicgroupid()==null) {
                        JOptionPane.showMessageDialog(this, 
                                "Ο καλλιτέχνης είναι ο μοναδικός συντελεστής σε κάποιο/α Άλμπουμ\n" 
                                + "και δεν μπορεί να διαγραφεί", 
                                "Σφάλμα",
                                JOptionPane.WARNING_MESSAGE);
                        deleteButton.setEnabled(true);
                        return;      
                    }
                }
                
                //Ανάκτηση του καλλιτέχνη που βρίσκεται 
                //στην επιλεγμένη γραμμή από τη βάση
                //και τοποθέτησή του στο ArrayList ar
                for (Integer i : artistsTable.getSelectedRows()) {
                        ar.add(artistList.get(artistsTable.convertRowIndexToModel(i)));
                }
                
                for (Artist a2 : ar) {
                        try {
                            //Νέα δοσοληψία
                            if (!em.getTransaction().isActive()) {
                                em.getTransaction().begin();
                            }
                            //Εντοπίζουμε τον καλλιτέχνη στη βάση από το id του
                            artist = em.find(Artist.class, a2.getId());
                            
                            // Τον διαγράφουμε από τα συγκροτήματα στα οποία πιθανον να ανήκε
                            for (Musicgroup mg2 : artist.getMusicgroupList()) { 
                                mg2.getArtistList().remove(artist);
                            }
                            
                            // Τον διαγράφουμε από τα άλμπουμ στα οποία πιθανον μετείχε
                            for (Album alb2 : artist.getAlbumList()) { 
                                alb2.setArtistid(null);
                            }
                            
                            //Αφαιρούμε τον καλλιτέχνη από τη βάση
                            em.remove(artist);
                            //Διαγράφουμε τον καλλιτέχνη από τη λίστα με τους καλλιτέχνες
                            //που υπάρχει στον κώδικα της φόρμας
                            artistList.remove(artist1);
                            //Τερματισμός δοσοληψίας
                            em.getTransaction().commit();
                        } catch (Exception e) {
                            e.printStackTrace();
                            JOptionPane.showMessageDialog(null, "Σφάλμα βάσης...");
                        }
                    }
                    //Άδειασμα του ArrayList ar.
                    deleteButton.setEnabled(true);
                    ar.clear();   
            }
        }   
    }//GEN-LAST:event_deleteButtonActionPerformed

    private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
       
        // Μήνυμα επιβεβαίωσης της αποθήκευσης
        Object[] options = {"Ναι","Όχι"};
        Integer choice = JOptionPane.showOptionDialog(this,
            "Θέλετε να αποθηκεύσετε τις αλλαγές;",
            "Επιβεβαίωση αλλαγών",
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null,
            options,
            options[0]);

        //Αν επιλεγεί το "Ναι"
        if (choice == JOptionPane.YES_OPTION){
            //Αν προερχόμαστε από "Μεταβολή"
            if(cancelSave){
                
                //Έλεγχος΄ότι δεν είναι κενά τα υποχρεωτικά πεδία 
                if (artist1.getArtisticname().equals("")||artist1.getFirstname().equals("")
                    ||artist1.getLastname().equals("")) { 
                    JOptionPane.showMessageDialog(this, "Τα πεδία με αστερίσκο (*)"+
                        "\nείναι υποχρεωτικά."+
                        "\nΔεν γίνεται να μείνουν κενά", "ERROR",
                    JOptionPane.WARNING_MESSAGE);
                    return;
                }

                //Έλεγχος για το αν υπάρχει ήδη ο καλλιτέχνης στη ΒΔ
                for (Artist a : artistList) {
                    if (a != artist1 && a.getArtisticname().equals(artist1.getArtisticname())) { 
                        JOptionPane.showMessageDialog(this, 
                            "Ο καλλιτέχνης υπάρχει.", 
                            "Σφάλμα",
                        JOptionPane.WARNING_MESSAGE);
                        artist1.setArtisticname(neosKallitexnis);
                        return;   
                    }   
                }

                    try {
                        //Νέα δοσοληψία
                        if (!em.getTransaction().isActive()) {
                            em.getTransaction().begin();
                        }

                        // Διαχείριση του φύλου του καλλιτέχνη
                        if (maleRadioButton.isSelected()){
                            artist1.setSex("male");}
                        else if (femaleRadioButton.isSelected()){
                            artist1.setSex("female");}
                        else
                           artist1.setSex(""); 

                        // Διαχείριση της ημερομηνίας γέννησης του καλλιτέχνη
                        Date birthDate = birthdayDateChooser.getDate();
                        artist1.setBirthday(birthDate);

                        cancelSave = false;

                        em.getTransaction().commit();
                    } catch (Exception e) {
                        e.printStackTrace();
                        JOptionPane.showMessageDialog(null, "Σφάλμα βάσης...");
                    }
            }
            //Αν προερχόμαστε από εισαγωγή
            else{
                artist1.setArtisticname(artisticNameTextField.getText());
                artist1.setFirstname(nameTextField.getText());
                artist1.setLastname(lastnameTextField.getText());
                artist1.setBirthplace(birthPlaceTextField.getText());
                
                 //Έλεγχος ότι δεν είναι κενά τα υποχρεωτικά πεδία 
                if (artist1.getArtisticname().equals("")||artist1.getFirstname().equals("")
                        ||artist1.getLastname().equals("")||genreComboBox.getSelectedIndex()==-1) { 
                    JOptionPane.showMessageDialog(this, "Τα πεδία με αστερίσκο (*)"+
                        "\nείναι υποχρεωτικά."+"\nΔεν γίνεται να μείνουν κενά", 
                        "ERROR",
                    JOptionPane.WARNING_MESSAGE);
                    return;
                }
                
                //Έλεγχος για το αν υπάρχει ήδη ο καλλιτέχνης στη ΒΔ
                for (Artist a : artistList) {
                    if (a != artist1 &&a.getArtisticname().equals(artist1.getArtisticname())) { 
                        JOptionPane.showMessageDialog(this, 
                            "Ο καλλιτέχνης υπάρχει.", 
                            "Σφάλμα",
                        JOptionPane.WARNING_MESSAGE);
                        return;   
                    }   
                }
                
                // Διαχείριση του είδους μουσικής
                Object test = genreComboBox.getModel().getSelectedItem();
                TypedQuery<Musicgenre> q = em.createNamedQuery("Musicgenre.findByName", Musicgenre.class);
                q.setParameter("name", test.toString());
                Musicgenre x = q.getSingleResult();
                artist1.setMusicgenreid(x);
                
                // Διαχείριση του φύλου του καλλιτέχνη
                if (maleRadioButton.isSelected()){
                    artist1.setSex("male");}
                else if (femaleRadioButton.isSelected()){
                    artist1.setSex("female");}
                else
                   artist1.setSex(""); 
                    

                // Διαχείριση της ημερομηνίας γέννησης του καλλιτέχνη
                Date birthDate = birthdayDateChooser.getDate();
                artist1.setBirthday(birthDate);
                
                //Ανανέωση Φόρμας
                artistList.add(artist1);
                em.getTransaction().commit();
                List<Artist> artistData = artistQuery.getResultList();
                artistList.clear();
                artistList.addAll(artistData);
                sortArtistList();
                cancelSave = false;
            }
            //Απενεργοποίηση των πεδίων εισαγωγής στοιχείων και των labels τους
            artisticNameTextField.setEnabled(false);
            genreComboBox.setEnabled(false);
            nameTextField.setEnabled(false);
            lastnameTextField.setEnabled(false);
            birthdayDateChooser.setEnabled(false);
            birthPlaceTextField.setEnabled(false);
            femaleRadioButton.setEnabled(false);
            maleRadioButton.setEnabled(false);

            cancelButton.setEnabled(false);
            saveButton.setEnabled(false);
            artisticNameLabel.setEnabled(false);
            genreLabel.setEnabled(false);
            nameLabel.setEnabled(false);
            lastnameLabel.setEnabled(false);
            sexLabel.setEnabled(false);
            birthdayLabel.setEnabled(false);
            birthPlaceLabel.setEnabled(false);
            femaleRadioButton.setSelected(false);
            maleRadioButton.setSelected(false);

            //Ενεργοποίηση του artistsTable
            artistsTable.setEnabled(true);
            //Αλλαγή χρώματος του artistsTable background
            artistsTable.setBackground(Color.WHITE);
            //Ενεργοποίηση του κουμιού "Εισαγωγή"
            newButton.setEnabled(true);
            //Ενεργοποίηση του κουμιού "Εισαγωγή"
            changeButton.setEnabled(true);
            //Ενεργοποίηση του κουμιού "Διαγραφή"
            deleteButton.setEnabled(true);
            //Ενεργοποίηση του κουμιού "Έξοδος"
            exitButton.setVisible(true);
            //Καλούμε τη setMainMenu για τη menuBar
            setMainMenu();
        }
    }//GEN-LAST:event_saveButtonActionPerformed

    private void artistsTablePropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_artistsTablePropertyChange
    
    }//GEN-LAST:event_artistsTablePropertyChange

    private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
        //Ακύρωση μετά από μεταβολή
        if (cancelSave){ 
        em.refresh(artist1);
        //Επαναφορά της λίστας
        List<Artist> artistData = artistQuery.getResultList();
        artistList.clear();
        artistList.addAll(artistData);
        sortArtistList();
        cancelSave = false;   
    }
    //Μετά από εισαγωγή  
    else {
        //Αναίρεση των αλλαγών που έγιναν στο artist1
        em.remove(artist1);
        cancelSave = false;
    }
        
    //Απενεργοποίηση των πεδίων εισαγωγής στοιχείων και των labels 
    artisticNameTextField.setEnabled(false);
    genreComboBox.setEnabled(false);
    nameTextField.setEnabled(false);
    lastnameTextField.setEnabled(false);
    birthdayDateChooser.setEnabled(false);
    birthdayDateChooser.setVisible(false);
    birthPlaceTextField.setEnabled(false);
    femaleRadioButton.setEnabled(false);
    maleRadioButton.setEnabled(false);
        
    cancelButton.setEnabled(false);
    saveButton.setEnabled(false);
    artisticNameLabel.setEnabled(false);
    genreLabel.setEnabled(false);
    nameLabel.setEnabled(false);
    lastnameLabel.setEnabled(false);
    sexLabel.setEnabled(false);
    birthdayLabel.setEnabled(false);
    birthPlaceLabel.setEnabled(false);
    femaleRadioButton.setSelected(false);
    maleRadioButton.setSelected(false);
        
    //Ενεργοποίηση του artistsTable
    artistsTable.setEnabled(true);    
    //Αλλαγή χρώματος του artistsTable background
    artistsTable.setBackground(Color.WHITE);
    //Ενεργοποίηση του κουμιού "Εισαγωγή"
    newButton.setEnabled(true);
    //Ενεργοποίηση του κουμιού "Μεταβολή"
    changeButton.setEnabled(true);
    //Ενεργοποίηση του κουμιού "Διαγραφή"
    deleteButton.setEnabled(true);
    //Ενεργοποίηση του κουμιού "Έξοδος"
    exitButton.setVisible(true);
    //Καλούμε τη setMainMenu για τη menuBar
    setMainMenu();
    
    if(em.getTransaction().isActive()){
        em.getTransaction().commit();}  
    }//GEN-LAST:event_cancelButtonActionPerformed

    private void changeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeButtonActionPerformed
        // Βάζουμε στη μεταβλητή row τη γραμμή που επιλέξαμε
        row = artistsTable.getSelectedRow();
        
        // Αν δεν έχουμε επιλλέξει κάτι τότε βγάλε μήνυμα λάθους
        if (artistsTable.getSelectedRow() == -1) {
            JOptionPane.showMessageDialog(this, "Επιλέξτε έναν καλλιτέχνη", 
                                           "ERROR",
                                           JOptionPane.WARNING_MESSAGE);
        }
        else {
            cancelSave = true;
            //Βάλε στο artist1 τον καλλιτέχνη
            artist1 = artistList.get(row);
            //Κάνε τον persist στη ΒΔ
            em.persist(artist1);
            
            //Ενεργοποίηση των πεδίων εισγωγής στοιχείων
            artistsTable.setBackground(Color.LIGHT_GRAY);
            artisticNameTextField.setEnabled(true);
            genreComboBox.setEnabled(true);
            nameTextField.setEnabled(true);
            lastnameTextField.setEnabled(true);
            birthdayDateChooser.setEnabled(true);
            birthdayDateChooser.setDate(artist1.getBirthday());
            birthdayDateChooser.setVisible(true);
            birthPlaceTextField.setEnabled(true);
            cancelButton.setEnabled(true);
            saveButton.setEnabled(true);
            femaleRadioButton.setEnabled(true);
            maleRadioButton.setEnabled(true);
        
            artisticNameLabel.setEnabled(true);
            genreLabel.setEnabled(true);
            nameLabel.setEnabled(true);
            lastnameLabel.setEnabled(true);
            sexLabel.setEnabled(true);
            birthdayLabel.setEnabled(true);
            birthPlaceLabel.setEnabled(true);
            
            //Επιλογή φύλου
            String sex = artist1.getSex();
            if (sex.equals("female"))
                femaleRadioButton.setSelected(true);
            else femaleRadioButton.setSelected(false);
            if (sex.equals("male"))
                maleRadioButton.setSelected(true);
            else 
               maleRadioButton.setSelected(false);
            
            //Απενεργοποίηση του artistsTable ώστε 
            //να μην μπορεί να επιλεγεί άλλος καλλιτέχνης
            artistsTable.setEnabled(false);
            //Απενεργοποίηση του κουμιού "Εισαγωγή"
            newButton.setEnabled(false);
            //Απενεργοποίηση του κουμιού "Μεταβολή"
            changeButton.setEnabled(false); 
            //Απενεργοποίηση του κουμιού "Διαγραφή"
            deleteButton.setEnabled(false);
            //Απενεργοποίηση του κουμιού "Έξοδος"
            exitButton.setVisible(false);
            //Καλούμε τη setSaveMenu για τη menuBar
            setSaveMenu();
        }
    }//GEN-LAST:event_changeButtonActionPerformed

    private void newButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newButtonActionPerformed
        //Καθαρισμός τυχόν επιλογής από τον πίνακα καλλιτεχνών
        artistsTable.clearSelection();
        artistsTable.setBackground(Color.LIGHT_GRAY);
//        exit = 1;
        //Ενεργοποίηση των πεδίων εισγωγής στοιχείων
        //και αρχικοποίηση των τιμών τους
        artisticNameTextField.setEnabled(true);
        artisticNameTextField.setText(neosKallitexnis);
        genreComboBox.setEnabled(true);
        genreComboBox.setSelectedItem((Musicgenre)musicgenreList.get(0));
        genreComboBox.setSelectedIndex(-1);
        genreComboBox.setEditable(false);
        femaleRadioButton.setEnabled(true);
        maleRadioButton.setEnabled(true);
        nameTextField.setEnabled(true);
        nameTextField.setText(neosKallitexnis);
        lastnameTextField.setEnabled(true);
        lastnameTextField.setText(neosKallitexnis);
        birthdayDateChooser.setEnabled(true);
        birthdayDateChooser.setDate(neosKallitexnisBday);
        birthdayDateChooser.setVisible(true);
        birthPlaceTextField.setEnabled(true);
        birthPlaceTextField.setText(neosKallitexnis);
        
        cancelButton.setEnabled(true);
        saveButton.setEnabled(true);
        
        artisticNameLabel.setEnabled(true);
        genreLabel.setEnabled(true);
        nameLabel.setEnabled(true);
        lastnameLabel.setEnabled(true);
        sexLabel.setEnabled(true);
        birthdayLabel.setEnabled(true);
        birthPlaceLabel.setEnabled(true);
        
        //Απενεργοποίηση του artistsTable ώστε 
        //να μην μπορεί να επιλεγεί άλλος καλλιτέχνης
        artistsTable.setEnabled(false);
        //Απενεργοποίηση του κουμιού "Εισαγωγή"
        newButton.setEnabled(false);
        //Απενεργοποίηση του κουμιού "Μεταβολή"
        changeButton.setEnabled(false);
        //Απενεργοποίηση του κουμιού "Διαγραφή"
        deleteButton.setEnabled(false);
        //Απενεργοποίηση του κουμιού "Έξοδος"
        exitButton.setVisible(false);
        //Καλούμε τη setSaveMenu για τη menuBar
        setSaveMenu();
        
        //Δημιουργούμε ένα νέο καλλιτέχνη
        artist2 = new Artist (null,neosKallitexnis);
        artist2.setFirstname(neosKallitexnis);
        artist2.setLastname(neosKallitexnis);
        artist2.setBirthday(neosKallitexnisBday);
        artist2.setBirthplace(neosKallitexnisBplace);
        artist2.setSex(neosKallitexnisS);
        artist2.setMusicgenreid((Musicgenre)musicgenreList.get(0));
        
        try {
            //Νέα δοσοληψία
            if (!em.getTransaction().isActive()) {
                em.getTransaction().begin();
                
            em.persist(artist2);
            
            artist1=artist2;
            em.flush();
            
            }
        }catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Σφάλμα βάσης...");
        }
    }//GEN-LAST:event_newButtonActionPerformed

    private void artisticNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_artisticNameTextFieldActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_artisticNameTextFieldActionPerformed

    private void birthPlaceTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_birthPlaceTextFieldActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_birthPlaceTextFieldActionPerformed

    private void genreComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_genreComboBoxActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_genreComboBoxActionPerformed

    private void exitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitButtonActionPerformed
        frame.addPanelInMain(new EmptyMainPanel(frame));
        frame.addPanelInSide(new MainMenuSidePanel(frame, em));
    }//GEN-LAST:event_exitButtonActionPerformed

    private void artistsTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_artistsTableMouseClicked
        if(evt.getClickCount()==2){
            ActionEvent e = null;
            changeButtonActionPerformed(e);
        }
    }//GEN-LAST:event_artistsTableMouseClicked


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private pojos.Artist artist1;
    private java.util.List<pojos.Artist> artistList;
    private javax.swing.JPanel artistListPanel;
    private javax.swing.JPanel artistManagementPanel;
    private javax.persistence.Query artistQuery;
    private javax.swing.JLabel artisticNameLabel;
    private javax.swing.JTextField artisticNameTextField;
    private javax.swing.JTable artistsTable;
    private javax.swing.JLabel birthPlaceLabel;
    private javax.swing.JTextField birthPlaceTextField;
    private com.toedter.calendar.JDateChooser birthdayDateChooser;
    private javax.swing.JLabel birthdayLabel;
    private javax.swing.JButton cancelButton;
    private javax.swing.JButton changeButton;
    private javax.swing.JButton deleteButton;
    private javax.swing.JButton exitButton;
    private javax.swing.JRadioButton femaleRadioButton;
    private javax.swing.JComboBox genreComboBox;
    private javax.swing.JLabel genreLabel;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lastnameLabel;
    private javax.swing.JTextField lastnameTextField;
    private javax.swing.JLabel mainLabel;
    private javax.swing.JRadioButton maleRadioButton;
    private java.util.List<pojos.Musicgenre> musicgenreList;
    private javax.persistence.Query musicgenreQuery;
    private javax.swing.JLabel nameLabel;
    private javax.swing.JTextField nameTextField;
    private javax.swing.JButton newButton;
    private javax.swing.JButton saveButton;
    private javax.swing.JLabel sexLabel;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables


}
